//
//  XBLinkNode.h
//  数据结构算法和笔试题
//
//  Created by 王国栋 on 16/5/28.
//  Copyright © 2016年 xiaobai. All rights reserved.
//

#ifndef XBLinkNode_h
#define XBLinkNode_h

#include <stdio.h>
#include "BaseMsg.h"
typedef struct XBLinkNode
{
    DATATYPE data;//
    struct XBLinkNode * next;//指针域
}XBLinkNode;

//常用的基本操作

/**
 初始化一个空的线性表
 
 @ param LinkListHeader 需要初始化的空的线性表的指针
 */
void initXBLinkNode(XBLinkNode * LinkListHeader);
/**
 *  判断是否为空
 *
 *  @param LinkListHeader 判断的线性表
 *
 *  @return 1 表示为空 0 表示不为空
 */
int isXBLinkNodeEmpty(XBLinkNode * LinkListHeader);

/**
 
 在线性表里面添加一个元素
 
 */
int addItemToXBLinkNode (XBLinkNode * LinkListHeader,DATATYPE obj);

/**
 *  清空线性表
 */
void clearXBLinkNode(XBLinkNode * LinkListHeader);
/**
 *  将线性表LinkListHeader里面的idx所在位置的值读取出来交给obj
 *
 *  @param LinkListHeader 操作的线性表
 *  @param idx       所查找的索引
 *  @param obj       用来存放目标值的变量
 
 @return 返回操作结果
 */

int getItemFromXBLinkNodeByIndex(XBLinkNode LinkListHeader,int idx,DATATYPE * obj);
/**
 *  查询obj是否在LinkListHeader里面
 *
 *  @param LinkListHeader 所查找的线性表
 *  @param obj       搜索的目标值
 *
 *  @return 目标值在线性表里面的位置 失败 表示没有找到，否则返回正确位置，多个话只返回第一个位置
 */

int findItemInXBLinkNode(XBLinkNode LinkListHeader,DATATYPE obj);

/**
 *  在线性表里面插入一个元素
 *
 *  @param LinkListHeader 操作的线性表
 *  @param idx       插入的位置
 *  @param obj       需要插入的数据
 *
 *  @return 1表示成功，0表示失败
 */
int insertItemInXBLinkNode(XBLinkNode *LinkListHeader,int idx,DATATYPE obj);
/**
 *
 *  删除线性表idx位置的元素
 *  @return 返回操作结果
 */

int deleteItemInXBLinkNode(XBLinkNode *LinkListHeader,int idx);
/**
 *
 获取线性表的长度
 */
int getLengthForXBLinkNode(XBLinkNode LinkListHeader);


void printXBLinkNodeData(XBLinkNode LinkListHeader);

/**
 * 修改线性表的某个位置的值
 */
int replaceXBLinkNodeatIdx(XBLinkNode *LinkListHeader,int idx,DATATYPE obj);

#endif /* XBLinkNode_h */
